package mylab.base.foundation.template.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.time.LocalDateTime;

import lombok.Getter;
import lombok.Setter;
import mylab.base.foundation.lang.IdName;


@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public abstract class Entity<K> implements IdName<K> {


    /**
     * 名称
     */
    protected String name;

    /**
     * 租户id
     * 多租户COLUMN模式时必须，其它模式时为冗余设计
     */
    @JsonIgnore
    protected String tenantId;


    /**
     * 扩展属性
     */
    protected String extra;

    /**
     * 备注
     */
    protected String comments;

    /**
     * 启用状态标识
     */
    protected boolean enabled = true;

    /**
     * 版本号(乐观锁)
     */
    @JsonIgnore
    protected int version = 0;

    /**
     * 逻辑删除标识
     * <p>
     * 1、只对自动注入的sql起效
     * 2、对mapper中的自定义方法无效
     * 3、对mybatis原生的 @Select @Delete 无效
     * </p>
     */
    @JsonIgnore
    protected boolean deleted = false;

    @JsonIgnore
    protected String owner;

    @JsonIgnore
    protected String creater;

    @JsonIgnore
    protected String updater;

    @JsonIgnore
    protected LocalDateTime gmtCreate;

    @JsonIgnore
    protected LocalDateTime gmtUpdate;

}
